home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / gfx / show / jpegAGAsrc21.lha / jpegAGAsrc / jpegAGA / ASLfiles.c < prev    next >
C/C++ Source or Header  |  1995-01-14  |  3KB  |  113 lines

  1. /* Display an ASL file requester */
  2.  
  3. #include <libraries/asl.h>
  4. #include <workbench/startup.h>
  5.  
  6. #ifndef __GNUC__
  7. #include <pragmas/exec_pragmas.h>
  8. #include <pragmas/asl_pragmas.h>
  9. #include <clib/exec_protos.h>
  10. #include <clib/asl_protos.h>
  11. #else
  12. #include <inline/exec.h>
  13. #include <inline/asl.h>
  14. #endif
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18.  
  19. #define MAXFILES 500
  20.  
  21. extern char *PicArray[];
  22. extern int NumPictures;
  23. extern void CloseDisplay(void);
  24.  
  25. struct TagItem frtags[] =
  26. {
  27.  { ASLFR_InitialPattern,"#?.(jpg|jpeg)"  },
  28.  { ASLFR_DoMultiSelect, (ULONG)TRUE },
  29.  { ASLFR_DoPatterns,    (ULONG)TRUE },
  30.  { ASLFR_RejectIcons,   (ULONG)TRUE },
  31.  { TAG_DONE,            (ULONG)TRUE }
  32. };
  33.  
  34. extern struct Library *AslBase;
  35.  
  36. void ChooseFiles(void)
  37. {
  38.   struct FileRequester *fr;
  39.   struct WBArg *frargs;
  40.   int x,i;
  41.  
  42.   if( AslBase=OpenLibrary("asl.library", 39L) )
  43.   {
  44.     if( fr = (struct FileRequester *)
  45.         AllocAslRequest(ASL_FileRequest, frtags) )
  46.     {
  47.       if( AslRequest(fr, NULL) )
  48.       {
  49.         /* multiselect */
  50.         if(fr->rf_NumArgs)
  51.         {
  52.           frargs=fr->rf_ArgList;
  53.           for(x=0; x < fr->rf_NumArgs; x++)
  54.           {
  55.             PicArray[NumPictures] = malloc(strlen(fr->rf_Dir)+strlen(frargs[x].wa_Name)+3);
  56.             if(!PicArray[NumPictures])
  57.             {
  58.               printf("Out of memory!\n");
  59.               FreeAslRequest(fr);
  60.               CloseLibrary(AslBase);
  61.               AslBase = NULL;
  62.               CloseDisplay();
  63.               exit(10);
  64.             }
  65.             strcpy(PicArray[NumPictures], fr->rf_Dir);
  66.             i = strlen(fr->rf_Dir);
  67.             if(i)
  68.             {
  69.               i--;
  70.               if(fr->rf_Dir[i] != ':' && fr->rf_Dir[i] != '/')
  71.                 strcat(PicArray[NumPictures], "/");
  72.             }
  73.             strcat(PicArray[NumPictures], frargs[x].wa_Name);
  74.             /* puts(PicArray[NumPictures]); */
  75.             NumPictures++;
  76.             if(NumPictures == MAXFILES)
  77.             {
  78.               printf("Too many files!\n");
  79.               break;
  80.             }
  81.           }
  82.         }
  83.         else
  84.         {
  85.           /* only one file selected */
  86.           PicArray[NumPictures] = malloc(strlen(fr->rf_Dir)+strlen(fr->rf_File)+3);
  87.           if(!PicArray[NumPictures])
  88.           {
  89.             printf("Out of memory!\n");
  90.             FreeAslRequest(fr);
  91.             CloseLibrary(AslBase);
  92.             CloseDisplay();
  93.             exit(10);
  94.           }
  95.           strcpy(PicArray[NumPictures], fr->rf_Dir);
  96.           i = strlen(fr->rf_Dir);
  97.           if(i)
  98.           {
  99.             i--;
  100.             if(fr->rf_Dir[i] != ':' && fr->rf_Dir[i] != '/')
  101.               strcat(PicArray[NumPictures], "/");
  102.           }
  103.           strcat(PicArray[NumPictures], fr->rf_File);
  104.           NumPictures++;
  105.         }
  106.       }
  107.       FreeAslRequest(fr);
  108.     }
  109.     CloseLibrary(AslBase);
  110.     AslBase = NULL;
  111.   }
  112. }
  113.